<?php
/**
 * Request 관련 함수 모음 
 * 
 * @package php.lang
 *
 * @todo 단축함수에 대응하는 Request 클래스의 메소드를 전부 구현한다. 
 * @todo Session 클래스 제작 
 * @todo Cookie 클래스 제작 
 * @todo Server 클래스 제작 
 */


/**
 * HTTP 요청(Request)에 관련된 데이타를 제어한다. 
 * static 메소드로만 이루어져 있습니다. 
 *
 * @package php.lang
 *
 * @todo Request 객체 관련된 함수를 모두 구현해야한다. 
 * 
 */
class Request { 
	
	public function __construct() {} 

	public static function get($field, $value = '', $is_set = false) { 
		if (empty($_GET[$field])) {
			$_GET[$field] = $value;
		}

		if ($is_set) { 
			$_GET[$field] = $value;
		}

		return $_GET[$field];
	}

	public static function post($field, $value = '', $is_set = false) { 
		if (empty($_POST[$field])) {
			$_POST[$field] = $value;
		}

		if ($is_set) { 
			$_POST[$field] = $value;
		}

		return $_POST[$field];
	}

	public static function vars($field, $value = '', $is_set = false) { 
		if (empty($_REQUEST[$field])) {
			$_REQUEST[$field] = $value;
		}

		if ($is_set) {
			$_REQUEST[$field] = $value;
		}

		return $_REQUEST[$field];
	}

	public static function is($method) { 
		return (Request::method() == strtoupper($method));
	}

	public static function method() { 
		return strtoupper($_SERVER['REQUEST_METHOD']);
	}

	public static function view($type) { 
		$arr = self::getGlobals($type);

		if (gettype($arr) != "array") {
			return "배열이 아닙니다.";
		}
		
		echo "<table border='1'>";
		echo  "<tr><th>Key</th><th>Value</th></tr>";
		
		foreach ($arr as $key => $value) {

				if (is_array($value)) { 
					echo  "<tr><td>";
					echo $key;
					echo "</td><td>";
					self::view($value);
					echo "</td></tr>";					
				} else { 

					$value = htmlspecialchars($value);
					$value = nl2br($value);
					echo  "<tr><td>";
					echo $key;
					echo "</td><td>";
					echo $value;
					echo "</td></tr>";	
				}
		}

		echo "</table>";
	}

	public static function getGlobals($type) { 
		if (is_array($type) ) return $type;

		$type = strtoupper($type);
		switch($type) { 
			case 'POST' :		return $_POST;
			case 'GET' :		return $_GET;
			case 'REQUEST' :	return $_REQUEST;
			default	:			return ${"_".$type};
		}
	}
}

?>